package field

import "gitee.com/yanwc/net/utils"

type (
	SWBit32    uint32 // 32位开关
	SWBit32Raw [4]byte
)

// BIT 位字段声明
const (
	BITisOutOfServeArea SWBit32 = 0b_0000_0000_0000_0010_0000_0000_0000_0000 // 0:未定位或定位不在服务 1: 已定位且在服务区外
	BITisGyroFixed      SWBit32 = 0b_0000_0000_0000_1000_0000_0000_0000_0000 // 0:陀螺仪方向未知 1:陀螺仪方向确
	BITisGPSUnfixed     SWBit32 = 0b_0000_0000_0001_0000_0000_0000_0000_0000 // 0:GPS已定位 1:GPS未定位
	BITisSleepMode      SWBit32 = 0b_0000_0000_1000_0000_0000_0000_0000_0000 // 0:非休眠模式 1:休眠模式
	BITisWheelSpin      SWBit32 = 0b_0000_0010_0000_0000_0000_0000_0000_0000 // 0:后轮静止 1:后轮转动
	BITisMoving         SWBit32 = 0b_0000_0100_0000_0000_0000_0000_0000_0000 // 0: 车辆静止 1: 车辆移动
	BITisFastGPS        SWBit32 = 0b_0000_1000_0000_0000_0000_0000_0000_0000 // 0:慢速上报 1:快速上报
	BITisWheelLocked    SWBit32 = 0b_0100_0000_0000_0000_0000_0000_0000_0000 // 0:后轮未锁 1:后轮已锁
)

func (b SWBit32) SwitchValue(v SWBit32) bool {
	return b&v != 0
}

func (bb SWBit32Raw) Type() SWBit32 {
	return SWBit32(utils.BytesToNumber[uint32](bb[:]))
}

func (bb SWBit32) Raw() (out SWBit32Raw) {
	copy(out[:], utils.NumberToBytesWithBigEndian(bb))
	return
}

func (bb SWBit32Raw) Slice() []byte {
	return bb[:]
}
